﻿// <copyright file="ILink.cs" company="City of Portland, BES-ASM">
// </copyright>
// <summary>ILink interface</summary>

namespace BESASM.EMGAATS.BusinessClasses
{
  using System;
  using System.Collections.Generic;
  using System.Linq;
  using System.Text;
  using System.Threading.Tasks;

  /// <summary>
  /// Interface for <see cref="Link"/>
  /// </summary>
  public interface ILink : IEntity
  {
    /// <summary>
    /// Gets or sets the linear geometry (planar) of the link.
    /// </summary>
    IPolyline Geometry { get; set; }

    /// <summary>
    /// Gets or sets the human readable link name
    /// </summary>
    int LinkName { get; set; } 

    /// <summary>
    /// Gets or sets the upstream node the link is connected to.
    /// </summary>
    INode USNode { get; set; }

    /// <summary>
    /// Gets or sets the downstream node the link is connected to.
    /// </summary>
    INode DSNode { get; set; }

    /// <summary>
    /// Gets or sets the upstream invert elevation of the link in feet.
    /// </summary>
    double USIEFt { get; set; }

    /// <summary>
    /// Gets or sets the downstream invert elevation of the link in feet.
    /// </summary>
    double DSIEFt { get; set; }

    /// <summary>
    /// Gets or sets the cross-section geometry of the link.
    /// </summary>
    /// <remarks>A null value indicates the link is circular.</remarks>
    ICrossSection CrossSection { get; set; }

    /// <summary>
    /// Gets or sets the length of the link in feet.
    /// </summary>
    double LengthFt { get; set; }

    /// <summary>
    /// Gets or sets the height of the link.
    /// </summary>
    double HeightIn { get; set; }

    /// <summary>
    /// Gets the calculated cross-sectional area of the link.
    /// </summary>
    double AreaSqIn { get; }

    /// <summary>
    /// Gets or sets the material of the link.
    /// </summary>
    Material Material { get; set; }

    /// <summary>
    /// Gets the collection of as-built diagram names associated with this link.
    /// </summary>
    ICollection<string> AsBuilts { get; }
  }
}
